package array;

import java.util.Arrays;
import java.util.Scanner;

//8.数组,类和对象
public class java3_4 {
    public static void main(String[] args) {
//        //测试二分查找
//        int [] arr = {1,2,3,4,5,6,7,8,9,10};
//        System.out.println("请输入要查找的数:");
//        Scanner sc = new Scanner(System.in);
//        int input = sc.nextInt();
//        int index = binarysearch(arr,input);
//        if(index == -1){
//            System.out.println(input + "不在数组中");
//        }
//        else
//            System.out.println("要查找的数在数组中的下标为" + index);

        //测试冒泡排序(倒序)
//        int [] arr = {9,5,2,7,1,2,4};
//         bubblesort(arr);
//         Arrays.sort(arr);//直接进行升序排序的系统函数
//        reverseArray(arr);
//        System.out.println(Arrays.toString(arr));

        //二维数组
//        int [][] arr = new int [3][4];//创建了一个3行4列的二维数组
//        System.out.println(arr.length);//3
//        System.out.println(arr[0].length);//4
//        int [][] arr ={{1,2,3,4},{5,6,7,8},{9,10}} ;
//        System.out.println(arr[2].length);//看里面到底有没有数,而不是以0去填充,这点与C语言不同
//        System.out.println(arr[1].length);
//        System.out.println(arr[0].length);

        //测试多数元素
//        int [] arr = {2,2,3,4,5,6,79,8,2,2,2,2,2,2,2,2,2,2,2,2};
//        System.out.println(majorityElement(arr));

        //测试使奇数位于偶数之前的函数
        int[]arr = {1,2,4,6,7,89,5,6,26};
        func4(arr);
        System.out.println(Arrays.toString(arr));
    }
//使数组中的奇数位于偶数之前
//    public static void deal(int [] arr){
//        int odd = 0;
//        int even = 0;
//        int n = 0;
//        int p = 0;
//        int [] arr1 = new int[100];
//        int [] arr2 = new int[100];
//        for(int i = 0;i < arr.length;i++){
//            if(arr[i] % 2 != 0) {
//                odd++;
//                arr1[n++] = arr[i] ;
//            }
//            else
//            {
//                arr2[p++] = arr[i] ;
//                even++;
//            }
//        }
//        for(int i = 0;i < odd;i++){
//            arr[i] = arr1[i];
//        }
//         n = 0;
//        for(int i = odd ;i < odd + even;i++){
//            arr[i] = arr2[n++];
//        }
//
//    }

    //牛逼奇数前,偶数后写法
    public static void func4(int[] array) {
        int i = 0;
        int j = array.length-1;
        while (i < j) {
            //循环外面给了i < j  ,思考这里为什么还需要判断？
            //为了避免多交换一次,导致本来排好的顺序,中间再进行二次交换后再出错
            while ( array[i] % 2 != 0) {
                i++;//继续判断下一位是不是奇数,不是奇数的话,跳出内循环
            }
            //i 下标一定是偶数
            while (array[j] % 2 == 0) {
                j--;//判断上一位是不是偶数,不是偶数的话跳出内循环
            }
            int tmp = array[i];//将前后的异常值交换,再开始下一次判断
            array[i] = array[j];
            array[j] = tmp;
        }
    }








//    //找寻多数元素
//    public static int mostArray(int [] arr){
//        int [] arr2 = new int [1000];
//        for(int i = 0;i < arr.length;i++){
//            arr2[i] = arr[i];
//        }
//        for(int n = 0;n < arr.length;n++){
//            int max = 0;
//            for(int j = 0;j <arr.length;j++)
//            {
//                if(arr2[j] == arr[n]);
//                max++;
//            }
//               if(max > (n/2))
//                   return arr[n];
//        }
//                return -1;
//    }

    //牛逼写法
    public static int majorityElement(int []arr){
        Arrays.sort(arr);
        return arr[arr.length/2];//一定是中间的数
    }


    //二分查找函数(返回查找到的数的下表)
//    public static int binarysearch(int [] arr,int target){
//        int left = 0;
//        int right = arr.length - 1;
//        while(left <= right){
//            int mid = (left + right) / 2;
//            if(target == arr[mid]) {
//                return mid;
//            }
//                else if(target < arr[mid]){//target在mid的左边
//                    right = mid - 1;
//                }
//            else if(target > arr[mid]){//target在mid的右边
//                left = mid + 1;
//            }
//        }
//        return -1;
//    }


    //冒泡排序(升序)
//    public static void bubblesort(int [] arr){
//        for(int i = 0;i < arr.length - 1;i++){
//            boolean f = true;
//            for(int j = 0;j < arr.length - 1 - i;j++){
//                if(arr[j] > arr[j + 1])
//                {
//                    f = false;
//                    int temp = arr[j];
//                    arr[j] = arr[j + 1];
//                    arr[j + 1] = temp;
//                }
//            }
//            if(f)
//                break;
//        }
//    }

//    //数组倒序函数
//    public static void reverseArray(int [] arr){
//        int left = 0;
//        int right = arr.length - 1;
//        while(left <= right){
//            arr[left] = arr[right];
//            left++;
//            right--;
//        }
//    }


}




